#ifndef MESSAGETEXTEDIT_H
#define MESSAGETEXTEDIT_H

#include "global.h"

#include <QObject>
#include <QTextEdit>
#include <QMouseEvent>
#include <QApplication>
#include <QDrag>
#include <QMimeData>
#include <QMimeType>
#include <QFileInfo>
#include <QFileIconProvider>
#include <QPainter>
#include <QVector>

// 消息编辑框类
class MessageTextEdit : public QTextEdit
{
    Q_OBJECT
public:
    explicit MessageTextEdit(QWidget *parent = nullptr);

    ~MessageTextEdit();
    // 从富文本编辑器的内容中提取出消息信息（包括纯文本和特定格式的对象，如图片等），
    // 并将这些消息信息整理成一个QVector<MsgInfo>类型的列表返回
    QVector<MsgInfo> getMsgList();
    void insertFileFromUrl(const QStringList &urls);

protected:
    void dragEnterEvent(QDragEnterEvent *event) override;
    void dropEvent(QDropEvent *event) override;
    void keyPressEvent(QKeyEvent *e) override;

private:
    bool isImage(QString url);
    void insertMsgList(QVector<MsgInfo> &list,QString flag, QString text, QPixmap pix);
    void insertImages(const QString &url);
    void insertTextFile(const QString &url);
    void insertFromMimeData(const QMimeData *source);

    bool canInsertFromMimeData(const QMimeData *source) const;


    QStringList getUrl(QString text);
    // 获取文件图标及大小信息，并转化成图片
    QPixmap getFileIconPixmap(const QString &url);
    // 获取文件大小
    QString getFileSize(qint64 size);

private slots:
    void textEditChanged();

signals:
    void send();


private:
    QVector<MsgInfo> m_msg_list;
    QVector<MsgInfo> m_get_msg_list;
};

#endif // MESSAGETEXTEDIT_H
